home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 090 / cmln0885.arc / CROSS2.LTG < prev    next >
Text File  |  1986-02-27  |  2KB  |  71 lines

  1. crossthoughts Listinτá 2«á  
  2.         
  3. PP╠ routine≤ t∩ recal∞ anΣ storσ element≤ oµ ß two-dimensiona∞ ì
  4. virtua∞ array, usinτ thσ checkerboarΣ method
  5.  
  6. -- Constants are:
  7.  
  8. -- Table_Size : Maximum number of pages in RAM.
  9. -- Page_Col_Size  : Number of columns in a page.
  10. -- Page_Row_Size  : Number of rows in a page
  11. -- ROWS : Number of rows
  12.  
  13. -- External identifiers are:
  14.  
  15. -- Table_Type = RECORD RAM_Page, Dirty_bit : integer; END 
  16. -- Table : ARRAY[1..Table_Size] of Table_Type
  17. -- SOUGHT_PAGE : integer
  18. -- RAM_Data : 
  19.     ARRAY[1..(Table_Sizσ ¬ Page_Col_Sizσ ¬ Page_Row_Size)▌ oµ An∙ type
  20.  
  21. -- Procedure≤ SAV┼ anΣ LOA─ arσ simila≥ t∩ thosσ iε listinτ (1)¼ ì
  22. thσ differencσ beinτ i≤ tha⌠ the∙ incorporatσ wrappinτ anΣ ì
  23. unwrappinτ array≤ t∩ matrice≤ anΣ vicσ versa¼ respectively.
  24.  
  25.  
  26. FUNCTIO╬ MATLOC(VM_Row_Index¼ VM_Col_Inde° ║ integer⌐ returε integer
  27.  
  28. BEGIN
  29.     SOUGHT_PAGE_Row = VM_Row_Index div Page_Row_Size + 1
  30.     SOUGHT_PAGE_Col = VM_Col_Index div Page_Col_Size + 1
  31.     SOUGHT_PAGE = SOUGHT_PAGE_Row  + (SOUGHT_PAGE_Col - 1) * ROWS
  32.     -- Loop to search for page among RAM resident pages.
  33.     INITIALIZE: Found = FALSE 
  34.     LOOP <Table_Lookup>
  35.     BEGIN For i = 1 TO Table_Size
  36.         IF SOUGHT_PAGE_Row = Table[i].RAM_Page
  37.         THEN Found = True
  38.              EXIT <Table_Lookup>
  39.         END IF
  40.     END LOOP <Table_Lookup>
  41.     TERMINATE: None
  42.  
  43.     IF NOT Found
  44.     THEN
  45.         Page_Swapped = Selected_Page() -- Function to select RAM resident
  46.                                           Page for swapping
  47.         IF Table[Page_Swapped].Dirty_bit THEN SAVE_MAT(Page_Swapped) END IF
  48.         LOAD_MAT(SOUGHT_PAGE,Page_Swapped)
  49.         Table[Page_Swapped].RAM_Page = SOUGHT_PAGE
  50.         Table[Page_Swapped].Dirty_bit = 0
  51.         SOUGHT_PAGE = Page_Swapped
  52.     ELSE
  53.         Page_Swapped = Selected_Page() -- Dummy call used to update
  54.                                        -- page replacement history
  55.         SOUGHT_PAGE = iè    END IF
  56.     Page_Row = VM_Row_Index mod Page_Row_Size + 1
  57.     Page_Col = VM_Col_Index mod Page_Row_Size + 1
  58.     Mat_Size = Page_Row_Size * Page_Col_Size
  59.     return {(SOUGHT_PAGE - 1) * Mat_Size + (Page_Col - 1) * Page_Row_Size
  60.              + Page_Row}
  61.  
  62. END MATLOC
  63.  
  64.  
  65. PROCEDURE VM_MAT_Assign(VM_Index : integer; X : Your_data)
  66.  
  67. BEGIN
  68.     RAM_Data[LOC(VM_Row_Index,VM_Col_Index)] = X
  69.     Table[SOUGHT_PAGE].Dirty_bit = 1
  70. END VM_MAT_Assign
  71.